1. Field of the Invention
The present invention generally relates to barcodes. More specifically, the present invention relates to methods and systems for creating barcodes where one or a set of barcodes are used to transfer data to a device.
2. Description of Related Art
Typically, barcodes are machine-readable representation of information displayed in a visual format on a surface. There are different types of barcodes. Linear barcodes store data in the widths and spacing of printed parallel lines. Stacked barcodes and 2-dimensional (2D) barcodes, which represent stored data in patterns of dots, concentric circles and hidden images, have a higher data storage capacity than linear barcodes. Barcodes may be read by optical scanners called barcode readers and/or scanned from an image by special software.
To increase the amount of information that can be stored in a given space, linear requirements of simple barcodes have been extended with matrix codes. Matrix codes are a type of 2D barcode. Matrix codes are made of a grid of square cells called modules. Stacked barcodes are similar to 2D barcodes. Stacked barcodes are formed by taking a traditional linear barcode and placing it in an envelope that allows multiple rows of linear barcodes. FIG. 1 illustrates an example of a stacked barcode 100 called QRCode1 typically used in the art today.
The mapping between data and the barcode that embeds the data is called a symbology. Symbologies include specifications relating to various parameters, such as, the encoding of the data, the start and stop markers into bars, dots, modules and spaces, the size of the quiet zone that may be required before and after the barcode. Symbologies can also include a specification for forward error correction used in the barcode.
The forward error correction used in barcode standards usually encodes the data in redundant fashion so that if a portion of the barcode is unreadable, the data can still be recovered. FIG. 2 illustrates a typical placement 210 of redundancy data in QRCode 100. Reed Solomon is a popular error correction scheme. The forward error correction scheme used in barcodes allows recovery of certain types of errors such as errors related to erasure, dirt and minor lighting changes (such as shadows on certain portions of the barcodes).
Linear and 2D barcode symbologies may use horizontal and vertical timing patterns to facilitate decoding of the barcode. The timing patterns usually include a one-module wide row or column of alternating dark and light modules, commencing and ending with a dark module. Linear and 2D barcode symbologies may use position detection patterns that enable the symbol density and version to be determined and may provide datum positions for determining module coordinates.
The timing patterns in two popular barcode standards are shown in FIGS. 3 and 4. FIG. 3 illustrates typical timing patterns 310 in QRCode 100, while FIG. 4 illustrates typical timing patterns 410 in a DataMatrix 400 barcode. In QRCode 100 and DataMatrix 400, horizontal and vertical timing patterns 310, 410 respectively consist of a one module wide row or column of alternating dark and light modules, commencing and ending with a dark module. In QRCode 100, the horizontal timing pattern runs across row 6 of the symbol between the separators for the upper position detection patterns; the vertical timing pattern similarly runs down column 6 of the symbol between the separators for the left-hand position detection patterns. The timing patterns enable the symbol density and version to be determined and provide datum positions for determining module coordinates.
Existing symbologies encode symbols in a linear or 2D image. More specifically, such symbologies use black and white modules, bars or dots that overall define the barcode image. When decoding a linear or 2D code example, various cases or causes of decoding confusion, error or failure may arise. For example, in one case, consecutive long sequences of white, or black, modules may render it hard to determine the exact number of consecutive white, or black, modules in the long sequence due to reader or scanner distortion, as well as the viewing angle of the reader or scanner relative to the plane of the barcode.
In another case, the typical barcode may utilize various patterns to determine the orientation and location of the image. These recognition patterns might repeat themselves in the data structure of the barcode. Such repetition might render decoding the barcode a difficult, if not impossible, task, because the software associated with the reader or scanner will interpret the data as an orientation or location pattern and never actually decode the data associated with that portion of the barcode.
In a further case, due to the large possible orientations of the reader or scanner relative to the plane of the barcode, each symbol may take on a different size and/or shape relative to the scanned or read image. The symbologies may assign a timing pattern in the image and try to resolve the location of each symbol through the timing and location patterns. At large or highly skewed viewing angles, this approach can result in decoding failure because the symbols may scale up to distorted and different-sized shapes at the final image that are unrecognizable (i.e., un-decodable) by the scanner or reader software. FIG. 5 illustrates a typical difference 510 between module sizes due to certain perspective distortions, such as parallax, of a typical barcode image 500.
In another case, portions of a barcode displayed on a conventional CRT display or an LCD display can be obscured by a video detection device, such as a camera. FIGS. 6-7 illustrate the black bands that can result from taking a photograph of a barcode that is displayed on a CRT 600 or an LCD 700 display, respectively.
In a case related to forward error correction in barcodes, adding redundancy to the barcode can make barcodes larger and cause decoding error or failure. FIG. 8 illustrates the same data encoded in QRCode 100, but with a higher level of conventional error correction 800. As shown in FIG. 6, when compared to FIG. 1, when such high-level error correction is used, the barcode becomes larger (i.e., more densely packed with modules). When the barcode is larger, the number of scanned or read pixels per module gets smaller, which increases the probability of decoding errors. This higher error probability counters the reason why the forward error correction was added in the first place. Thus, in practice, when the number of pixels allocated per module drops below a certain level, the number of errors may make the barcode totally unusable even with forward error correction.
In a further case related to forward error correction in barcodes, the amount of redundancy that can be added within the barcode is limited. For example, the QRCode symbology limits the error correction to about 30% of area allotted for data within the barcode. This case is further aggravated because the amount of that data that can be represented within the barcode is limited. For example, the maximum data allowed in a QRCode barcode is about 3,000 (3 k) bytes of information.
Hence, it would be desirable to provide one or more methods and/or systems that are adapted to creating barcodes in a more efficient manner, while solving one or more reading, scanning and/or decoding issues.